/**
 * 格式化文件大小
 * @param {Number} bytes 字节数
 * @returns {String} 格式化后的文件大小
 */
export function formatFileSize(bytes) {
  if (bytes === 0) return '0 B'
  
  const k = 1024
  const sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']
  const i = Math.floor(Math.log(bytes) / Math.log(k))
  
  return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]
}

/**
 * 格式化日期时间
 * @param {Date|String} date 日期对象或日期字符串
 * @param {String} format 格式化模板，默认 yyyy-MM-dd HH:mm:ss
 * @returns {String} 格式化后的日期字符串
 */
export function formatDateTime(date, format = 'yyyy-MM-dd HH:mm:ss') {
  if (!date) return '暂无信息'
  
  let dateObj;
  
  try {
    if (typeof date === 'string') {
      // 尝试多种方式解析日期字符串
      if (date.includes('T')) {
        // ISO格式如 2023-05-03T05:19:48.000+00:00
        dateObj = new Date(date);
      } else {
        // 常规格式如 2023-05-03 05:19:48
        dateObj = new Date(date.replace(/-/g, '/'));
      }
    } else {
      dateObj = new Date(date);
    }
    
    // 检查日期是否有效
    if (isNaN(dateObj.getTime())) {
      return typeof date === 'string' ? date : '无效日期';
    }
  } catch (error) {
    console.error('日期格式化错误:', error);
    return typeof date === 'string' ? date : '无效日期';
  }
  
  const o = {
    'M+': dateObj.getMonth() + 1, // 月份
    'd+': dateObj.getDate(), // 日
    'H+': dateObj.getHours(), // 小时
    'm+': dateObj.getMinutes(), // 分
    's+': dateObj.getSeconds(), // 秒
    'q+': Math.floor((dateObj.getMonth() + 3) / 3), // 季度
    S: dateObj.getMilliseconds() // 毫秒
  }
  
  if (/(y+)/.test(format)) {
    format = format.replace(RegExp.$1, (dateObj.getFullYear() + '').substr(4 - RegExp.$1.length))
  }
  
  for (const k in o) {
    if (new RegExp('(' + k + ')').test(format)) {
      format = format.replace(
        RegExp.$1,
        RegExp.$1.length === 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length)
      )
    }
  }
  
  return format
} 